The present invention relates generally to the useful art of computer software programming and more specifically to software related to computer networks.
Computer network systems are established for, among other reasons, organizing and providing efficient communication of data between network devices. The Open Systems Interconnection Basic Reference Model (the “OSI Model”) is a well-known, abstract description for communications and computer network protocol design, consisting of seven layers. A second, increasingly popular model is the TCP/IP model which describes a similar protocol in either four or five layers. While other layer models exist, the OSI and TCP/IP models are the most common. In each of these models, there exists a Network Layer (Layer Three) and a Data Link Layer (Layer Two).
The Network Layer provides the functional and procedural means of transferring variable length data sequences from a source to a destination by performing network routing functions. At a physical level, the Data Link Layer provides the functional and procedural means to transfer data between individual network entities, thus allowing for the transfer of data from a source to its ultimate destination in a network. Thus, the cumulative operations performed at the Data Link Layer allow for the transfer of data at the Network Layer. When referring to data being communicated, the data unit at the Data Link Layer is called a frame, while the data unit at the Network Layer is called a packet.
Due to the increasing volume of data communicated across modern networks, networked devices often become overloaded with data, causing a strain on the overall efficiency and reliability of the network. Inadequate CPU cycles and memory busses for receiving and retrieving packet data can lead to lost or “dropped” packets (i.e., data transfers are incomplete). This can result in a slower network response time, inaccurate verification and/or error reporting, or a variety of other errors depending on the application being run.
To reduce these network issues and improve network efficiency and reliability, systems are often designed with powerful processors that interface to high-speed, large, and complex memory systems. However, while such processors and memory systems help in reaching desired levels of network system performance, they are very expensive and often difficult to monitor and maintain.
Another approach to improving network system efficiency and reliability is to provide users with information regarding data that was lost, while still providing them with the portions of data that were successfully communicated across the network. While the transferred data is still incomplete, users are at least put on notice so that they can troubleshoot the issue and identify the problem.
Direct memory access (DMA) is another technique used to improve network system efficiency and reliability. In a system implementing DMA, DMA controllers are placed in computer systems to move blocks of data from one location to another without first having to pass through the CPU. This process is accomplished by having DMA controllers first decode packets to determine whether they should be accepted by a network system. If they are accepted, copies of the packets are typically stored in a high speed memory for a variety of purposes depending on the application accessing that data. For example, an application that tracks all packets coming from source A to destination B will determine whether the packet includes those specified source and destination address attributes, and if so, it copies the packet to a memory for quick and easy access in the future (e.g., to report a current summary of network traffic). The system processor is then relieved of the need to generate a long sequence of addresses to accomplish the transfer of data, thus relieving the system of valuable CPU use time. However, while DMA allows a system to forgo use of unnecessary CPU interaction, data must still be stored into a memory, thus requiring use of system bandwidth to move the data into the memory. Again, since large amounts of data are moved through networks, bandwidth gets quickly consumed, resulting in a strain on the network's resources, again contributing to a less efficient and less reliable system.